Autogenerated HTML docs for v1.7.6-178-g55272 
diff --git a/config.txt b/config.txt index c631d1c..b56959b 100644 --- a/config.txt +++ b/config.txt 
@@ -676,7 +676,7 @@  browser.<tool>.cmd:: 	Specify the command to invoke the specified browser. The 	specified command is evaluated in shell with the URLs passed -	as arguments. (See linkgit:git-web--browse[1].) +	as arguments. (See linkgit:git-web{litdd}browse[1].)    browser.<tool>.path:: 	Override the path for the given tool that may be used to 
diff --git a/git-check-ref-format.html b/git-check-ref-format.html index 52ee5a0..ed6f784 100644 --- a/git-check-ref-format.html +++ b/git-check-ref-format.html 
@@ -426,10 +426,12 @@  <div class="paragraph"><p>Checks if a given <em>refname</em> is acceptable, and exits with a non-zero   status if it is not.</p></div>   <div class="paragraph"><p>A reference is used in git to specify branches and tags. A  -branch head is stored under the <tt>$GIT_DIR/refs/heads</tt> directory, and  -a tag is stored under the <tt>$GIT_DIR/refs/tags</tt> directory (or, if refs  -are packed by <tt>git gc</tt>, as entries in the <tt>$GIT_DIR/packed-refs</tt> file).  -git imposes the following rules on how references are named:</p></div>  +branch head is stored in the <tt>refs/heads</tt> hierarchy, while  +a tag is stored in the <tt>refs/tags</tt> hierarchy of the ref namespace  +(typically in <tt>$GIT_DIR/refs/heads</tt> and <tt>$GIT_DIR/refs/tags</tt>  +directories or, as entries in file <tt>$GIT_DIR/packed-refs</tt>  +if refs are packed by <tt>git gc</tt>).</p></div>  +<div class="paragraph"><p>git imposes the following rules on how references are named:</p></div>   <div class="olist arabic"><ol class="arabic">   <li>   <p>  @@ -550,7 +552,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2010-11-06 00:41:57 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-check-ref-format.txt b/git-check-ref-format.txt index 205d83d..c9fdf84 100644 --- a/git-check-ref-format.txt +++ b/git-check-ref-format.txt 
@@ -18,9 +18,12 @@  status if it is not.    A reference is used in git to specify branches and tags. A -branch head is stored under the `$GIT_DIR/refs/heads` directory, and -a tag is stored under the `$GIT_DIR/refs/tags` directory (or, if refs -are packed by `git gc`, as entries in the `$GIT_DIR/packed-refs` file). +branch head is stored in the `refs/heads` hierarchy, while +a tag is stored in the `refs/tags` hierarchy of the ref namespace +(typically in `$GIT_DIR/refs/heads` and `$GIT_DIR/refs/tags` +directories or, as entries in file `$GIT_DIR/packed-refs` +if refs are packed by `git gc`). +  git imposes the following rules on how references are named:    . They can include slash `/` for hierarchical (directory) 
diff --git a/git-commit.html b/git-commit.html index e44f205..e597767 100644 --- a/git-commit.html +++ b/git-commit.html 
@@ -949,7 +949,7 @@  your working tree are temporarily stored to a staging area   called the "index" with <em>git add</em>. A file can be   reverted back, only in the index but not in the working tree,  -to that of the last commit with <tt>git reset HEAD&#8201;&#8212;&#8201;&lt;file&gt;</tt>,  +to that of the last commit with <tt>git reset HEAD -- &lt;file&gt;</tt>,   which effectively reverts <em>git add</em> and prevents the changes to   this file from participating in the next commit. After building   the state to be committed incrementally with these commands,  @@ -1134,7 +1134,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-05-17 06:42:42 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-commit.txt b/git-commit.txt index 7951cb7..5cc84a1 100644 --- a/git-commit.txt +++ b/git-commit.txt 
@@ -284,7 +284,7 @@  your working tree are temporarily stored to a staging area  called the "index" with 'git add'. A file can be  reverted back, only in the index but not in the working tree, -to that of the last commit with `git reset HEAD -- <file>`, +to that of the last commit with `git reset HEAD \-- <file>`,  which effectively reverts 'git add' and prevents the changes to  this file from participating in the next commit. After building  the state to be committed incrementally with these commands, 
diff --git a/git-config.html b/git-config.html index 6918319..ae11b16 100644 --- a/git-config.html +++ b/git-config.html 
@@ -1839,7 +1839,7 @@  <p>   Specify the command to invoke the specified browser. The   specified command is evaluated in shell with the URLs passed  - as arguments. (See <a href="git-web&#8212;browse.html">git-web&#8212;browse(1)</a>.)  + as arguments. (See <a href="git-web&#45;&#45;browse.html">git-web&#45;&#45;browse(1)</a>.)   </p>   </dd>   <dt class="hdlist1">  
diff --git a/git-log.html b/git-log.html index 66f5838..09f8cd1 100644 --- a/git-log.html +++ b/git-log.html 
@@ -986,7 +986,7 @@  \ / / / /   `-------------'</tt></pre>   </div></div>  -<div class="paragraph"><p>The horizontal line of history A&#8212;P is taken to be the first parent of  +<div class="paragraph"><p>The horizontal line of history A---P is taken to be the first parent of   each merge. The commits are:</p></div>   <div class="ulist"><ul>   <li>  
diff --git a/git-mergetool--lib.html b/git-mergetool--lib.html index ceef497..40a978c 100644 --- a/git-mergetool--lib.html +++ b/git-mergetool--lib.html 
@@ -414,7 +414,7 @@  </div>   <h2 id="_synopsis">SYNOPSIS</h2>   <div class="sectionbody">  -<div class="paragraph"><p><em>TOOL_MODE=(diff|merge) . "$(git --exec-path)/git-mergetool&#8212;lib"</em></p></div>  +<div class="paragraph"><p><em>TOOL_MODE=(diff|merge) . "$(git --exec-path)/git-mergetool&#45;&#45;lib"</em></p></div>   </div>   <h2 id="_description">DESCRIPTION</h2>   <div class="sectionbody">  @@ -474,7 +474,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-03-15 23:30:14 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-mergetool--lib.txt b/git-mergetool--lib.txt index 63edede..5b0d51f 100644 --- a/git-mergetool--lib.txt +++ b/git-mergetool--lib.txt 
@@ -7,7 +7,7 @@    SYNOPSIS  -------- -'TOOL_MODE=(diff|merge) . "$(git --exec-path)/git-mergetool--lib"' +'TOOL_MODE=(diff|merge) . "$(git --exec-path)/git-mergetool{litdd}lib"'    DESCRIPTION  ----------- 
diff --git a/git-remote.html b/git-remote.html index 4553527..55f2f3a 100644 --- a/git-remote.html +++ b/git-remote.html 
@@ -473,10 +473,10 @@  the remote repository.</p></div>   <div class="paragraph"><p>With <tt>-t &lt;branch&gt;</tt> option, instead of the default glob   refspec for the remote to track all branches under  -<tt>$GIT_DIR/remotes/&lt;name&gt;/</tt>, a refspec to track only <tt>&lt;branch&gt;</tt>  +the <tt>refs/remotes/&lt;name&gt;/</tt> namespace, a refspec to track only <tt>&lt;branch&gt;</tt>   is created. You can give more than one <tt>-t &lt;branch&gt;</tt> to track   multiple branches without grabbing all branches.</p></div>  -<div class="paragraph"><p>With <tt>-m &lt;master&gt;</tt> option, <tt>$GIT_DIR/remotes/&lt;name&gt;/HEAD</tt> is set  +<div class="paragraph"><p>With <tt>-m &lt;master&gt;</tt> option, a symbolic-ref <tt>refs/remotes/&lt;name&gt;/HEAD</tt> is set   up to point at remote&#8217;s <tt>&lt;master&gt;</tt> branch. See also the set-head command.</p></div>   <div class="paragraph"><p>When a fetch mirror is created with <tt>--mirror=fetch</tt>, the refs will not   be stored in the <em>refs/remotes/</em> namespace, but rather everything in  @@ -512,22 +512,23 @@  </dt>   <dd>   <p>  -Sets or deletes the default branch (<tt>$GIT_DIR/remotes/&lt;name&gt;/HEAD</tt>) for  +Sets or deletes the default branch (i.e. the target of the  +symbolic-ref <tt>refs/remotes/&lt;name&gt;/HEAD</tt>) for   the named remote. Having a default branch for a remote is not required,   but allows the name of the remote to be specified in lieu of a specific   branch. For example, if the default branch for <tt>origin</tt> is set to   <tt>master</tt>, then <tt>origin</tt> may be specified wherever you would normally   specify <tt>origin/master</tt>.   </p>  -<div class="paragraph"><p>With <tt>-d</tt>, <tt>$GIT_DIR/remotes/&lt;name&gt;/HEAD</tt> is deleted.</p></div>  -<div class="paragraph"><p>With <tt>-a</tt>, the remote is queried to determine its <tt>HEAD</tt>, then  -<tt>$GIT_DIR/remotes/&lt;name&gt;/HEAD</tt> is set to the same branch. e.g., if the remote  +<div class="paragraph"><p>With <tt>-d</tt>, the symbolic ref <tt>refs/remotes/&lt;name&gt;/HEAD</tt> is deleted.</p></div>  +<div class="paragraph"><p>With <tt>-a</tt>, the remote is queried to determine its <tt>HEAD</tt>, then the  +symbolic-ref <tt>refs/remotes/&lt;name&gt;/HEAD</tt> is set to the same branch. e.g., if the remote   <tt>HEAD</tt> is pointed at <tt>next</tt>, "<tt>git remote set-head origin -a</tt>" will set  -<tt>$GIT_DIR/refs/remotes/origin/HEAD</tt> to <tt>refs/remotes/origin/next</tt>. This will  +the symbolic-ref <tt>refs/remotes/origin/HEAD</tt> to <tt>refs/remotes/origin/next</tt>. This will   only work if <tt>refs/remotes/origin/next</tt> already exists; if not it must be   fetched first.</p></div>  -<div class="paragraph"><p>Use <tt>&lt;branch&gt;</tt> to set <tt>$GIT_DIR/remotes/&lt;name&gt;/HEAD</tt> explicitly. e.g., "git  -remote set-head origin master" will set <tt>$GIT_DIR/refs/remotes/origin/HEAD</tt> to  +<div class="paragraph"><p>Use <tt>&lt;branch&gt;</tt> to set the symbolic-ref <tt>refs/remotes/&lt;name&gt;/HEAD</tt> explicitly. e.g., "git  +remote set-head origin master" will set the symbolic-ref <tt>refs/remotes/origin/HEAD</tt> to   <tt>refs/remotes/origin/master</tt>. This will only work if   <tt>refs/remotes/origin/master</tt> already exists; if not it must be fetched first.</p></div>   </dd>  @@ -659,7 +660,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-04-06 19:53:11 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-remote.txt b/git-remote.txt index 528f34a..5a8c506 100644 --- a/git-remote.txt +++ b/git-remote.txt 
@@ -60,11 +60,11 @@  +  With `-t <branch>` option, instead of the default glob  refspec for the remote to track all branches under -`$GIT_DIR/remotes/<name>/`, a refspec to track only `<branch>` +the `refs/remotes/<name>/` namespace, a refspec to track only `<branch>`  is created. You can give more than one `-t <branch>` to track  multiple branches without grabbing all branches.  + -With `-m <master>` option, `$GIT_DIR/remotes/<name>/HEAD` is set +With `-m <master>` option, a symbolic-ref `refs/remotes/<name>/HEAD` is set  up to point at remote's `<master>` branch. See also the set-head command.  +  When a fetch mirror is created with `\--mirror=fetch`, the refs will not @@ -92,24 +92,25 @@    'set-head'::   -Sets or deletes the default branch (`$GIT_DIR/remotes/<name>/HEAD`) for +Sets or deletes the default branch (i.e. the target of the +symbolic-ref `refs/remotes/<name>/HEAD`) for  the named remote. Having a default branch for a remote is not required,  but allows the name of the remote to be specified in lieu of a specific  branch. For example, if the default branch for `origin` is set to  `master`, then `origin` may be specified wherever you would normally  specify `origin/master`.  + -With `-d`, `$GIT_DIR/remotes/<name>/HEAD` is deleted. +With `-d`, the symbolic ref `refs/remotes/<name>/HEAD` is deleted.  + -With `-a`, the remote is queried to determine its `HEAD`, then -`$GIT_DIR/remotes/<name>/HEAD` is set to the same branch. e.g., if the remote +With `-a`, the remote is queried to determine its `HEAD`, then the +symbolic-ref `refs/remotes/<name>/HEAD` is set to the same branch. e.g., if the remote  `HEAD` is pointed at `next`, "`git remote set-head origin -a`" will set -`$GIT_DIR/refs/remotes/origin/HEAD` to `refs/remotes/origin/next`. This will +the symbolic-ref `refs/remotes/origin/HEAD` to `refs/remotes/origin/next`. This will  only work if `refs/remotes/origin/next` already exists; if not it must be  fetched first.  + -Use `<branch>` to set `$GIT_DIR/remotes/<name>/HEAD` explicitly. e.g., "git -remote set-head origin master" will set `$GIT_DIR/refs/remotes/origin/HEAD` to +Use `<branch>` to set the symbolic-ref `refs/remotes/<name>/HEAD` explicitly. e.g., "git +remote set-head origin master" will set the symbolic-ref `refs/remotes/origin/HEAD` to  `refs/remotes/origin/master`. This will only work if  `refs/remotes/origin/master` already exists; if not it must be fetched first.  + 
diff --git a/git-rev-list.html b/git-rev-list.html index fe647b3..6486214 100644 --- a/git-rev-list.html +++ b/git-rev-list.html 
@@ -987,7 +987,7 @@  \ / / / /   `-------------'</tt></pre>   </div></div>  -<div class="paragraph"><p>The horizontal line of history A&#8212;P is taken to be the first parent of  +<div class="paragraph"><p>The horizontal line of history A---P is taken to be the first parent of   each merge. The commits are:</p></div>   <div class="ulist"><ul>   <li>  
diff --git a/git-revert.html b/git-revert.html index 6a59601..01a60ca 100644 --- a/git-revert.html +++ b/git-revert.html 
@@ -428,7 +428,7 @@  should see <a href="git-reset.html">git-reset(1)</a>, particularly the <em>--hard</em> option. If   you want to extract specific files as they were in another commit, you   should see <a href="git-checkout.html">git-checkout(1)</a>, specifically the <tt>git checkout  -&lt;commit&gt;&#8201;&#8212;&#8201;&lt;filename&gt;</tt> syntax. Take care with these alternatives as  +&lt;commit&gt; -- &lt;filename&gt;</tt> syntax. Take care with these alternatives as   both will discard uncommitted changes in your working directory.</p></div>   </div>   <h2 id="_options">OPTIONS</h2>  @@ -581,7 +581,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-03-15 23:30:14 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-revert.txt b/git-revert.txt index ac10cfb..6a21b37 100644 --- a/git-revert.txt +++ b/git-revert.txt 
@@ -23,7 +23,7 @@  should see linkgit:git-reset[1], particularly the '--hard' option. If  you want to extract specific files as they were in another commit, you  should see linkgit:git-checkout[1], specifically the `git checkout -<commit> -- <filename>` syntax. Take care with these alternatives as +<commit> \-- <filename>` syntax. Take care with these alternatives as  both will discard uncommitted changes in your working directory.    OPTIONS 
diff --git a/git-sh-i18n--envsubst.html b/git-sh-i18n--envsubst.html index 886d396..8dc9215 100644 --- a/git-sh-i18n--envsubst.html +++ b/git-sh-i18n--envsubst.html 
@@ -4,7 +4,7 @@  <head>   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   <meta name="generator" content="AsciiDoc 8.4.5" />  -<title>git-sh-i18n&#8212;envsubst(1)</title>  +<title>git-sh-i18n&#45;&#45;envsubst(1)</title>   <style type="text/css">   /* Debug borders */   p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {  @@ -403,7 +403,7 @@  <body>   <div id="header">   <h1>  -git-sh-i18n&#8212;envsubst(1) Manual Page  +git-sh-i18n&#45;&#45;envsubst(1) Manual Page   </h1>   <h2>NAME</h2>   <div class="sectionbody">  @@ -417,8 +417,8 @@  <div class="verseblock">   <div class="verseblock-content">eval_gettext () {   printf "%s" "$1" | (  - export PATH $(<em>git sh-i18n&#8212;envsubst</em> --variables "$1");  - <em>git sh-i18n&#8212;envsubst</em> "$1"  + export PATH $(<em>git sh-i18n&#45;&#45;envsubst</em> --variables "$1");  + <em>git sh-i18n&#45;&#45;envsubst</em> "$1"   )   }</div>   <div class="verseblock-attribution">  @@ -429,7 +429,7 @@  <div class="paragraph"><p>This is not a command the end user would want to run. Ever.   This documentation is meant for people who are studying the   plumbing scripts and/or are writing new ones.</p></div>  -<div class="paragraph"><p>git-sh-i18n&#8212;envsubst is Git&#8217;s stripped-down copy of the GNU  +<div class="paragraph"><p><em>git sh-i18n&#45;&#45;envsubst</em> is Git&#8217;s stripped-down copy of the GNU   <tt>envsubst(1)</tt> program that comes with the GNU gettext package. It&#8217;s   used internally by <a href="git-sh-i18n.html">git-sh-i18n(1)</a> to interpolate the variables   passed to the the <tt>eval_gettext</tt> function.</p></div>  @@ -443,7 +443,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-05-31 19:53:01 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-sh-i18n--envsubst.txt b/git-sh-i18n--envsubst.txt index 61e4c08..5c3ec32 100644 --- a/git-sh-i18n--envsubst.txt +++ b/git-sh-i18n--envsubst.txt 
@@ -1,5 +1,5 @@ -git-sh-i18n--envsubst(1) -======================== +git-sh-i18n{litdd}envsubst(1) +=============================    NAME  ---- @@ -10,8 +10,8 @@  [verse]  eval_gettext () { 	printf "%s" "$1" | ( -	export PATH $('git sh-i18n--envsubst' --variables "$1"); -	'git sh-i18n--envsubst' "$1" +	export PATH $('git sh-i18n{litdd}envsubst' --variables "$1"); +	'git sh-i18n{litdd}envsubst' "$1" 	)  }   @@ -22,7 +22,7 @@  This documentation is meant for people who are studying the  plumbing scripts and/or are writing new ones.   -git-sh-i18n--envsubst is Git's stripped-down copy of the GNU +'git sh-i18n{litdd}envsubst' is Git's stripped-down copy of the GNU  `envsubst(1)` program that comes with the GNU gettext package. It's  used internally by linkgit:git-sh-i18n[1] to interpolate the variables  passed to the the `eval_gettext` function. 
diff --git a/git-sh-i18n.html b/git-sh-i18n.html index 07a9aab..b03f451 100644 --- a/git-sh-i18n.html +++ b/git-sh-i18n.html 
@@ -448,7 +448,7 @@  <p>   Currently a dummy fall-through function implemented as a wrapper   around <tt>printf(1)</tt> with variables expanded by the  - <a href="git-sh-i18n&#8212;envsubst.html">git-sh-i18n&#8212;envsubst(1)</a> helper. Will be replaced by a  + <a href="git-sh-i18n&#45;&#45;envsubst.html">git-sh-i18n&#45;&#45;envsubst(1)</a> helper. Will be replaced by a   real gettext implementation in a later version.   </p>   </dd>  @@ -460,7 +460,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-05-23 23:05:02 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-sh-i18n.txt b/git-sh-i18n.txt index 3b1f7ac..eca69e3 100644 --- a/git-sh-i18n.txt +++ b/git-sh-i18n.txt 
@@ -34,7 +34,7 @@  eval_gettext:: 	Currently a dummy fall-through function implemented as a wrapper 	around `printf(1)` with variables expanded by the -	linkgit:git-sh-i18n--envsubst[1] helper. Will be replaced by a +	linkgit:git-sh-i18n{litdd}envsubst[1] helper. Will be replaced by a 	real gettext implementation in a later version.    GIT 
diff --git a/git-submodule.html b/git-submodule.html index 8b114b5..c4f4350 100644 --- a/git-submodule.html +++ b/git-submodule.html 
@@ -602,7 +602,7 @@  repositories accordingly.   </p>   <div class="paragraph"><p>"git submodule sync" synchronizes all submodules while  -"git submodule sync&#8201;&#8212;&#8201;A" synchronizes submodule "A" only.</p></div>  +"git submodule sync -- A" synchronizes submodule "A" only.</p></div>   </dd>   </dl></div>   </div>  @@ -770,7 +770,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-05-03 00:48:04 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-submodule.txt b/git-submodule.txt index 5e7a413..12af4de 100644 --- a/git-submodule.txt +++ b/git-submodule.txt 
@@ -172,7 +172,7 @@ 	repositories accordingly.  +  "git submodule sync" synchronizes all submodules while -"git submodule sync -- A" synchronizes submodule "A" only. +"git submodule sync \-- A" synchronizes submodule "A" only.    OPTIONS  ------- 
diff --git a/git-web--browse.html b/git-web--browse.html index ec3dd51..8fd7c04 100644 --- a/git-web--browse.html +++ b/git-web--browse.html 
@@ -551,7 +551,7 @@  <div class="paragraph"><p>You can explicitly provide a full path to your preferred browser by   setting the configuration variable <em>browser.&lt;tool&gt;.path</em>. For example,   you can configure the absolute path to firefox by setting  -<em>browser.firefox.path</em>. Otherwise, <em>git web&#8212;browse</em> assumes the tool  +<em>browser.firefox.path</em>. Otherwise, <em>git web&#45;&#45;browse</em> assumes the tool   is available in PATH.</p></div>   <h3 id="_browser_lt_tool_gt_cmd">browser.&lt;tool&gt;.cmd</h3><div style="clear:left"></div>   <div class="paragraph"><p>When the browser, specified by options or configuration variables, is  @@ -595,7 +595,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-03-15 23:30:14 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git-web--browse.txt b/git-web--browse.txt index 69d92fa..9b0d1fe 100644 --- a/git-web--browse.txt +++ b/git-web--browse.txt 
@@ -68,7 +68,7 @@  You can explicitly provide a full path to your preferred browser by  setting the configuration variable 'browser.<tool>.path'. For example,  you can configure the absolute path to firefox by setting -'browser.firefox.path'. Otherwise, 'git web--browse' assumes the tool +'browser.firefox.path'. Otherwise, 'git web{litdd}browse' assumes the tool  is available in PATH.    browser.<tool>.cmd 
diff --git a/git.html b/git.html index e5eebab..5ad666a 100644 --- a/git.html +++ b/git.html 
@@ -1827,8 +1827,7 @@  </dt>   <dd>   <p>  - indicates the head of the current branch (i.e. the  - contents of <tt>$GIT_DIR/HEAD</tt>).  + indicates the head of the current branch.   </p>   </dd>   <dt class="hdlist1">  @@ -1837,7 +1836,7 @@  <dd>   <p>   a valid tag <em>name</em>  - (i.e. the contents of <tt>$GIT_DIR/refs/tags/&lt;tag&gt;</tt>).  + (i.e. a <tt>refs/tags/&lt;tag&gt;</tt> reference).   </p>   </dd>   <dt class="hdlist1">  @@ -1846,7 +1845,7 @@  <dd>   <p>   a valid head <em>name</em>  - (i.e. the contents of <tt>$GIT_DIR/refs/heads/&lt;head&gt;</tt>).  + (i.e. a <tt>refs/heads/&lt;head&gt;</tt> reference).   </p>   </dd>   </dl></div>  @@ -2210,7 +2209,7 @@  </div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-06-26 22:38:07 UTC  +Last updated 2011-07-13 23:50:41 UTC   </div>   </div>   </body>  
diff --git a/git.txt b/git.txt index 3c7a832..0172cd7 100644 --- a/git.txt +++ b/git.txt 
@@ -523,16 +523,15 @@  symbolic notation:    HEAD:: -	indicates the head of the current branch (i.e. the -	contents of `$GIT_DIR/HEAD`). +	indicates the head of the current branch.    <tag>:: 	a valid tag 'name' -	(i.e. the contents of `$GIT_DIR/refs/tags/<tag>`). +	(i.e. a `refs/tags/<tag>` reference).    <head>:: 	a valid head 'name' -	(i.e. the contents of `$GIT_DIR/refs/heads/<head>`). +	(i.e. a `refs/heads/<head>` reference).    For a more complete list of ways to spell object names, see  "SPECIFYING REVISIONS" section in linkgit:gitrevisions[7]. 
diff --git a/gitglossary.html b/gitglossary.html index 1383355..46bafec 100644 --- a/gitglossary.html +++ b/gitglossary.html 
@@ -720,8 +720,8 @@  <dd>   <p>   A <a href="#def_ref">named reference</a> to the <a href="#def_commit">commit</a> at the tip of a  - <a href="#def_branch">branch</a>. Heads are stored in  - <tt>$GIT_DIR/refs/heads/</tt>, except when using packed refs. (See  + <a href="#def_branch">branch</a>. Heads are stored in a file in  + <tt>$GIT_DIR/refs/heads/</tt> directory, except when using packed refs. (See   <a href="git-pack-refs.html">git-pack-refs(1)</a>.)   </p>   </dd>  @@ -733,8 +733,8 @@  The current <a href="#def_branch">branch</a>. In more detail: Your <a href="#def_working_tree">working tree</a> is normally derived from the state of the tree   referred to by HEAD. HEAD is a reference to one of the   <a href="#def_head">heads</a> in your repository, except when using a  - <a href="#def_detached_HEAD">detached HEAD</a>, in which case it may  - reference an arbitrary commit.  + <a href="#def_detached_HEAD">detached HEAD</a>, in which case it directly  + references an arbitrary commit.   </p>   </dd>   <dt class="hdlist1">  @@ -1079,8 +1079,9 @@  <dd>   <p>   A 40-byte hex representation of a <a href="#def_SHA1">SHA1</a> or a name that  - denotes a particular <a href="#def_object">object</a>. These may be stored in  - <tt>$GIT_DIR/refs/</tt>.  + denotes a particular <a href="#def_object">object</a>. They may be stored in  + a file under <tt>$GIT_DIR/refs/</tt> directory, or  + in the <tt>$GIT_DIR/packed-refs</tt> file.   </p>   </dd>   <dt class="hdlist1">  @@ -1215,14 +1216,14 @@  </dt>   <dd>   <p>  - A <a href="#def_ref">ref</a> pointing to a <a href="#def_tag_object">tag</a> or  - <a href="#def_commit_object">commit object</a>. In contrast to a <a href="#def_head">head</a>,  - a tag is not changed by a <a href="#def_commit">commit</a>. Tags (not  - <a href="#def_tag_object">tag objects</a>) are stored in <tt>$GIT_DIR/refs/tags/</tt>. A  - git tag has nothing to do with a Lisp tag (which would be  - called an <a href="#def_object_type">object type</a> in git&#8217;s context). A  - tag is most typically used to mark a particular point in the  - commit ancestry <a href="#def_chain">chain</a>.  + A <a href="#def_ref">ref</a> under <tt>refs/tags/</tt> namespace that points to an  + object of an arbitrary type (typically a tag points to either a  + <a href="#def_tag_object">tag</a> or a <a href="#def_commit_object">commit object</a>).  + In contrast to a <a href="#def_head">head</a>, a tag is not updated by  + the <tt>commit</tt> command. A git tag has nothing to do with a Lisp  + tag (which would be called an <a href="#def_object_type">object type</a>  + in git&#8217;s context). A tag is most typically used to mark a particular  + point in the commit ancestry <a href="#def_chain">chain</a>.   </p>   </dd>   <dt class="hdlist1">  
diff --git a/glossary-content.txt b/glossary-content.txt index 8f62d1a..3595b58 100644 --- a/glossary-content.txt +++ b/glossary-content.txt 
@@ -161,8 +161,8 @@    [[def_head]]head:: 	A <<def_ref,named reference>> to the <<def_commit,commit>> at the tip of a -	<<def_branch,branch>>. Heads are stored in -	`$GIT_DIR/refs/heads/`, except when using packed refs. (See +	<<def_branch,branch>>. Heads are stored in a file in +	`$GIT_DIR/refs/heads/` directory, except when using packed refs. (See 	linkgit:git-pack-refs[1].)    [[def_HEAD]]HEAD:: @@ -170,8 +170,8 @@ 	working tree>> is normally derived from the state of the tree 	referred to by HEAD. HEAD is a reference to one of the 	<<def_head,heads>> in your repository, except when using a -	<<def_detached_HEAD,detached HEAD>>, in which case it may -	reference an arbitrary commit. +	<<def_detached_HEAD,detached HEAD>>, in which case it directly +	references an arbitrary commit.    [[def_head_ref]]head ref:: 	A synonym for <<def_head,head>>. @@ -382,8 +382,9 @@    [[def_ref]]ref:: 	A 40-byte hex representation of a <<def_SHA1,SHA1>> or a name that -	denotes a particular <<def_object,object>>. These may be stored in -	`$GIT_DIR/refs/`. +	denotes a particular <<def_object,object>>. They may be stored in +	a file under `$GIT_DIR/refs/` directory, or +	in the `$GIT_DIR/packed-refs` file.    [[def_reflog]]reflog:: 	A reflog shows the local "history" of a ref. In other words, @@ -459,14 +460,14 @@ 	command.    [[def_tag]]tag:: -	A <<def_ref,ref>> pointing to a <<def_tag_object,tag>> or -	<<def_commit_object,commit object>>. In contrast to a <<def_head,head>>, -	a tag is not changed by a <<def_commit,commit>>. Tags (not -	<<def_tag_object,tag objects>>) are stored in `$GIT_DIR/refs/tags/`. A -	git tag has nothing to do with a Lisp tag (which would be -	called an <<def_object_type,object type>> in git's context). A -	tag is most typically used to mark a particular point in the -	commit ancestry <<def_chain,chain>>. +	A <<def_ref,ref>> under `refs/tags/` namespace that points to an +	object of an arbitrary type (typically a tag points to either a +	<<def_tag_object,tag>> or a <<def_commit_object,commit object>>). +	In contrast to a <<def_head,head>>, a tag is not updated by +	the `commit` command. A git tag has nothing to do with a Lisp +	tag (which would be called an <<def_object_type,object type>> +	in git's context). A tag is most typically used to mark a particular +	point in the commit ancestry <<def_chain,chain>>.    [[def_tag_object]]tag object:: 	An <<def_object,object>> containing a <<def_ref,ref>> pointing to 
diff --git a/rev-list-options.txt b/rev-list-options.txt index 7e7ba68..554ab8c 100644 --- a/rev-list-options.txt +++ b/rev-list-options.txt 
@@ -313,7 +313,7 @@  \ / / / /  `-------------'  ----------------------------------------------------------------------- -The horizontal line of history A--P is taken to be the first parent of +The horizontal line of history A---P is taken to be the first parent of  each merge. The commits are:    * `I` is the initial commit, in which `foo` exists with contents 
diff --git a/technical/pack-protocol.txt b/technical/pack-protocol.txt index 369f91d..a7004c6 100644 --- a/technical/pack-protocol.txt +++ b/technical/pack-protocol.txt 
@@ -179,34 +179,36 @@    Packfile Negotiation  -------------------- -After reference and capabilities discovery, the client can decide -to terminate the connection by sending a flush-pkt, telling the -server it can now gracefully terminate (as happens with the ls-remote -command) or it can enter the negotiation phase, where the client and -server determine what the minimal packfile necessary for transport is. +After reference and capabilities discovery, the client can decide to +terminate the connection by sending a flush-pkt, telling the server it can +now gracefully terminate, and disconnect, when it does not need any pack +data. This can happen with the ls-remote command, and also can happen when +the client already is up-to-date.   -Once the client has the initial list of references that the server -has, as well as the list of capabilities, it will begin telling the -server what objects it wants and what objects it has, so the server -can make a packfile that only contains the objects that the client needs. -The client will also send a list of the capabilities it wants to be in -effect, out of what the server said it could do with the first 'want' line. +Otherwise, it enters the negotiation phase, where the client and +server determine what the minimal packfile necessary for transport is, +by telling the server what objects it wants, its shallow objects +(if any), and the maximum commit depth it wants (if any). The client +will also send a list of the capabilities it wants to be in effect, +out of what the server said it could do with the first 'want' line.    ----  upload-request = want-list - have-list - compute-end + *shallow-line + *1depth-request + flush-pkt    want-list = first-want  *additional-want - flush-pkt + + shallow-line = PKT_LINE("shallow" SP obj-id) + + depth-request = PKT_LINE("deepen" SP depth)    first-want = PKT-LINE("want" SP obj-id SP capability-list LF)  additional-want = PKT-LINE("want" SP obj-id LF)   - have-list = *have-line - have-line = PKT-LINE("have" SP obj-id LF) - compute-end = flush-pkt / PKT-LINE("done") + depth = 1*DIGIT  ----    Clients MUST send all the obj-ids it wants from the reference @@ -215,21 +217,64 @@  obj-id in a 'want' command which did not appear in the response  obtained through ref discovery.   -If client is requesting a shallow clone, it will now send a 'deepen' -line with the depth it is requesting. +The client MUST write all obj-ids which it only has shallow copies +of (meaning that it does not have the parents of a commit) as +'shallow' lines so that the server is aware of the limitations of +the client's history. Clients MUST NOT mention an obj-id which +it does not know exists on the server.   -Once all the "want"s (and optional 'deepen') are transferred, -clients MUST send a flush-pkt. If the client has all the references -on the server, client flushes and disconnects. +The client now sends the maximum commit history depth it wants for +this transaction, which is the number of commits it wants from the +tip of the history, if any, as a 'deepen' line. A depth of 0 is the +same as not making a depth request. The client does not want to receive +any commits beyond this depth, nor objects needed only to complete +those commits. Commits whose parents are not received as a result are +defined as shallow and marked as such in the server. This information +is sent back to the client in the next step.   -TODO: shallow/unshallow response and document the deepen command in the ABNF. +Once all the 'want's and 'shallow's (and optional 'deepen') are +transferred, clients MUST send a flush-pkt, to tell the server side +that it is done sending the list. + +Otherwise, if the client sent a positive depth request, the server +will determine which commits will and will not be shallow and +send this information to the client. If the client did not request +a positive depth, this step is skipped. + +---- + shallow-update = *shallow-line + *unshallow-line + flush-pkt + + shallow-line = PKT-LINE("shallow" SP obj-id) + + unshallow-line = PKT-LINE("unshallow" SP obj-id) +---- + +If the client has requested a positive depth, the server will compute +the set of commits which are no deeper than the desired depth, starting +at the client's wants. The server writes 'shallow' lines for each +commit whose parents will not be sent as a result. The server writes +an 'unshallow' line for each commit which the client has indicated is +shallow, but is no longer shallow at the currently requested depth +(that is, its parents will now be sent). The server MUST NOT mark +as unshallow anything which the client has not indicated was shallow.    Now the client will send a list of the obj-ids it has using 'have' -lines. In multi_ack mode, the canonical implementation will send up -to 32 of these at a time, then will send a flush-pkt. The canonical -implementation will skip ahead and send the next 32 immediately, -so that there is always a block of 32 "in-flight on the wire" at a -time. +lines, so the server can make a packfile that only contains the objects +that the client needs. In multi_ack mode, the canonical implementation +will send up to 32 of these at a time, then will send a flush-pkt. The +canonical implementation will skip ahead and send the next 32 immediately, +so that there is always a block of 32 "in-flight on the wire" at a time. + +---- + upload-haves = have-list + compute-end + + have-list = *have-line + have-line = PKT-LINE("have" SP obj-id LF) + compute-end = flush-pkt / PKT-LINE("done") +----    If the server reads 'have' lines, it then will respond by ACKing any  of the obj-ids the client said it had that the server also has. The 
diff --git a/user-manual.html b/user-manual.html index b20ba21..d2dfd35 100644 --- a/user-manual.html +++ b/user-manual.html 
@@ -1,5 +1,5 @@  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User’s Manual (for version 1.5.3 or newer)</title><link rel="stylesheet" href="docbook-xsl.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book" title="Git User’s Manual (for version 1.5.3 or newer)"><div class="titlepage"><div><div><h1 class="title"><a name="id521529"></a>Git User’s Manual (for version 1.5.3 or newer)</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#id521456"></a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a git repository via the git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via http</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a name="id521456"></a></h2></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User’s Manual (for version 1.5.3 or newer)</title><link rel="stylesheet" href="docbook-xsl.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book" title="Git User’s Manual (for version 1.5.3 or newer)"><div class="titlepage"><div><div><h1 class="title"><a name="id275974"></a>Git User’s Manual (for version 1.5.3 or newer)</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#id275900"></a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a git repository via the git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via http</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a name="id275900"></a></h2></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX  command-line skills, but no previous knowledge of git.</p><p><a class="xref" href="#repositories-and-branches" title="Chapter 1. Repositories and Branches">Chapter 1, <i>Repositories and Branches</i></a> and <a class="xref" href="#exploring-git-history" title="Chapter 2. Exploring git history">Chapter 2, <i>Exploring git history</i></a> explain how  to fetch and study a project using git—read these chapters to learn how  to build and test a particular version of a software project, search for @@ -2081,8 +2081,8 @@  <a name="def_head"></a>head  </span></dt><dd>  A <a class="link" href="#def_ref">named reference</a> to the <a class="link" href="#def_commit">commit</a> at the tip of a - <a class="link" href="#def_branch">branch</a>. Heads are stored in - <code class="literal">$GIT_DIR/refs/heads/</code>, except when using packed refs. (See + <a class="link" href="#def_branch">branch</a>. Heads are stored in a file in + <code class="literal">$GIT_DIR/refs/heads/</code> directory, except when using packed refs. (See  <a class="ulink" href="git-pack-refs.html" target="_top">git-pack-refs(1)</a>.)  </dd><dt><span class="term">  <a name="def_HEAD"></a>HEAD @@ -2090,8 +2090,8 @@  The current <a class="link" href="#def_branch">branch</a>. In more detail: Your <a class="link" href="#def_working_tree">working tree</a> is normally derived from the state of the tree  referred to by HEAD. HEAD is a reference to one of the  <a class="link" href="#def_head">heads</a> in your repository, except when using a - <a class="link" href="#def_detached_HEAD">detached HEAD</a>, in which case it may - reference an arbitrary commit. + <a class="link" href="#def_detached_HEAD">detached HEAD</a>, in which case it directly + references an arbitrary commit.  </dd><dt><span class="term">  <a name="def_head_ref"></a>head ref  </span></dt><dd> @@ -2311,8 +2311,9 @@  <a name="def_ref"></a>ref  </span></dt><dd>  A 40-byte hex representation of a <a class="link" href="#def_SHA1">SHA1</a> or a name that - denotes a particular <a class="link" href="#def_object">object</a>. These may be stored in - <code class="literal">$GIT_DIR/refs/</code>. + denotes a particular <a class="link" href="#def_object">object</a>. They may be stored in + a file under <code class="literal">$GIT_DIR/refs/</code> directory, or + in the <code class="literal">$GIT_DIR/packed-refs</code> file.  </dd><dt><span class="term">  <a name="def_reflog"></a>reflog  </span></dt><dd> @@ -2399,14 +2400,14 @@  </dd><dt><span class="term">  <a name="def_tag"></a>tag  </span></dt><dd> - A <a class="link" href="#def_ref">ref</a> pointing to a <a class="link" href="#def_tag_object">tag</a> or - <a class="link" href="#def_commit_object">commit object</a>. In contrast to a <a class="link" href="#def_head">head</a>, - a tag is not changed by a <a class="link" href="#def_commit">commit</a>. Tags (not - <a class="link" href="#def_tag_object">tag objects</a>) are stored in <code class="literal">$GIT_DIR/refs/tags/</code>. A - git tag has nothing to do with a Lisp tag (which would be - called an <a class="link" href="#def_object_type">object type</a> in git’s context). A - tag is most typically used to mark a particular point in the - commit ancestry <a class="link" href="#def_chain">chain</a>. + A <a class="link" href="#def_ref">ref</a> under <code class="literal">refs/tags/</code> namespace that points to an + object of an arbitrary type (typically a tag points to either a + <a class="link" href="#def_tag_object">tag</a> or a <a class="link" href="#def_commit_object">commit object</a>). + In contrast to a <a class="link" href="#def_head">head</a>, a tag is not updated by + the <code class="literal">commit</code> command. A git tag has nothing to do with a Lisp + tag (which would be called an <a class="link" href="#def_object_type">object type</a> + in git’s context). A tag is most typically used to mark a particular + point in the commit ancestry <a class="link" href="#def_chain">chain</a>.  </dd><dt><span class="term">  <a name="def_tag_object"></a>tag object  </span></dt><dd>